# coding:utf-8
import os
from bloomfilter import Bloomfilter
"""
# 对布隆过滤封装bloom_filter

# 1、初始化bloom
bloom = Bloom(filter_filename, nbits)

# 2、使用布隆过滤过滤数据
bloom.fliter_data(data)
    :return: True or False 当数据已经存在的时候返回True，否则返回False

"""


# Bloom的封装
class Bloom(object):

    def __init__(self, bloom_filename, nbits=1000000):
        """
        初始化时使用两个参数
        :param bloom_filename: 过滤数据的文件名
        :param nbits:  默认是1000000个bit
        """
        # 文件名
        self.bloom_filename = bloom_filename
        if os.path.exists(bloom_filename):
                self.bloom = Bloomfilter(bloom_filename)
        else:
            # /Bloomfilter的参数是nbits，一个bit标志着一个数据是否存在
            self.bloom = Bloomfilter(nbits)

    def fliter_data(self, data):
        """
        过滤数据，如果数据存在，返回True，不存在则返回False
        :param data: 需要过滤的数据
        :return:
        """

        data = str(data)
        if not self.bloom.test(data):
            # 如果不存在、加入到文件中
            self.bloom.add(data)
            self.bloom.save(self.bloom_filename)
            return False

        # 如果存在，返回True
        return True
